import { asyncRouterMap, constantRouterMap } from '@/config/router.config'
import permissionsList from '@/utils/permissions'
/**
 * 过滤账户是否拥有某一个权限，并将菜单从加载列表移除
 *
 * @param permission
 * @param route
 * @returns {boolean}
 */
function hasPermission (perms, route) {
    let flag = permissionsList.find(item => {
      var a = item.children.find(it=>{
          return it.key == route.name
      })
      if(a){
          return true;
      }
      return item.key == route.name
    })

    // return true

    if (flag && (perms.indexOf(route.name + '_edit') <= -1)) {
      return false
    }
    return true
}

/**
 * 单账户多角色时，使用该方法可过滤角色不存在的菜单
 *
 * @param roles
 * @param route
 * @returns {*}
 */
// eslint-disable-next-line
// function hasRole(roles, route) {
//   if (route.meta && route.meta.roles) {
//     return route.meta.roles.includes(roles.id)
//   } else {
//     return true
//   }
// }

function filterAsyncRouter (routerMap, perms) {
  const accessedRouters = routerMap.filter(route => {
    if (hasPermission(perms, route)) {
      if (route.children && route.children.length) {
        route.children = filterAsyncRouter(route.children, perms)
      }
      return true
    }
    return false
  })

  return accessedRouters
}

const permission = {
  state: {
    routers: constantRouterMap,
    addRouters: []
  },
  mutations: {
    SET_ROUTERS: (state, routers) => {
      state.addRouters = routers
      state.routers = constantRouterMap.concat(routers)
    }
  },
  actions: {
    GenerateRoutes ({ commit }, data) {
      return new Promise(resolve => {
        const { perms } = data
        const accessedRouters = filterAsyncRouter(asyncRouterMap, perms)
  
        commit('SET_ROUTERS', accessedRouters)
        resolve()
      })
    }
  }
}

export default permission
